package main

import (
	"fmt"
	"math"
)

type shape interface {
	area1() float64
	area2() float64
	//(s *shape) area3() float //为啥没有指定指针的方法定义
}

type circle struct {
	radius float64
}

//面积 对象调用
func (c circle) area1() float64 {
	return math.Pi * c.radius * c.radius
}

//面积 指针调用
func (c *circle) area2() float64 {
	return math.Pi * c.radius * c.radius
}

//周长 指针调用
func (c *circle) updateRadius(newRadius float64) {
	c.radius = newRadius
}

//实现的方法必须是对象调用的方法 否则认为没有实现接口 (area2)
//info(c1) 报错
func info(s shape) {
	fmt.Println("area = ", s.area1())
}

func main() {
	c1 := circle{radius: 2.5}
	area1 := c1.area1()
	fmt.Println("radius= ", c1.radius, " area=", area1)
	c1.updateRadius(3)
	fmt.Println("radius= ", c1.radius, " area=", area1)

	//报错  认为没有实现shape接口
	//info(c1)
}
